perm filename OO4.FAI[CMS,LCS] blob sn#168980 filedate 1975-07-17 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE OO
C00004 00003	LOOP:	OUTSTR CRLF
C00005 00004	EVAL:	HRRZI MA,1
C00009 00005	BACK:	HRRZI 6,-2(CX)
C00012 00006	GETO:	HRRZI MA,(TS)
C00014 00007	SAVIT:	HRRZM 6,SAVFLG
C00018 00008	PTBEG:	SKIPN PTNUM
C00020 00009	TABL:	REPEAT 15,{JFCL↔}
C00023 ENDMK
C⊗;
	TITLE OO
	EXTERNAL JOBAPR,JOBTPC,JOBCNI,JOBFF,JOBREL,JOBDDT,$I
	FL←4 ↔ EN←7 ↔ TS←10 ↔ OU←11 ↔ CX←13
	MA←14 ↔ N←15 ↔ P←17 ↔ MEM←17000
INT:	HRRZI EN,INTRU
	HRRZM EN,JOBAPR
	HRRZI EN,706
	HRRZM EN,MEM+1
	HRRZI EN,106
	HRRZM EN,MEM+2
	HRRZI EN,MEM+3
	HRRM EN,INTY
	HRRZI EN,MEM+200
	CORE EN,
	HALT
FILIN:	OPEN DEVN
	JRST ERRO
	SETZM IFNAM+3
	LOOKUP IFNAM
	JRST ERRO
	MOVE EN,INPO
	SETZ TS,
	INPUT EN
	HRRZ EN,MEM
	HRRZI N,MEM(EN)
	HRRM N,INTY
	CORE N,
	JRST ERRO
	SUBI EN,200
	JUMPLE EN,RST
	IORI EN,177
	MOVNS EN
	HRLZI EN,-1(EN)
	HRRI EN,MEM+177
	INPUT EN
	JRST RST
ERRO:	OUTSTR QMARK
	JRST RST
FILO:	SUBI N,MEM
	HRRZM N,MEM
	IORI N,177
	MOVNS N
	HRLZI N,-1(N)
	HRRI N,MEM-1
	OPEN DEVN
	JRST ERRO
	SETZM OFNAM+3
	ENTER OFNAM
	JRST ERRO
	SETZ 16,
	OUTPUT N
	RELEAS
RST:	RESET
	SETZM PTNUM
	MOVE P,PDPO
	MOVE EN,IPC
	INTENB EN,
LOOP:	OUTSTR CRLF
	PUSHJ P,INTY
	PUSHJ P,EVAL
	HRRM TS,INTY
	MOVEM EN,TMP
	PUSHJ P,GETO
	JRST LOOP+1

INTY:	HRRZI N,MEM+3
	HRRZI TS,(N)
	OUTSTR ASTR
	IWAIT
	INCHRS EN
	JRST .-2
INLIN:	HRRZM EN,(TS)
	SETZM 1(TS)
	ADDI TS,2
	INCHRS EN
	CAIA
	JRST INLIN
	SKIPL OU,LITFL
	JRST (OU)
	POPJ P,

STLIT:	IWAIT
	INCHRS LITCHR
	JRST .-2
	HRRZI 6,LITCK
	HRRZM 6,LITFL
	SUBI TS,2
	SUB P,TWOB
	PUSH P,RETRN
	JRST INTY+4

LITCK:	CAME EN,LITCHR
	JRST INTY+3
	SETOM LITFL
	POPJ P,
EVAL:	HRRZI MA,1
	HRRZI CX,(N)
	JRST BGIN
MVM:	HRLI OU,400000(MA)
	HRRZI 6,2
	JRST LMVM
LAEQ:	HRRZI 6,2
	CAIE OU,(MA)
	ADDI 6,2
	SUBI 5,2
	HLL OU,(5)
LMVM:	MOVEM OU,(5)
	SETZM 1(5)
	ADDI 5,2
	SUBI TS,(6)
	ADDI 6,(5)
	HRLZI 6,(6)
	HRRI 6,(5)
	BLT 6,(TS)
	JRST LKMO
FDEQ:	MOVE 4,MEM(MA)
	HRRZI 5,(N)
LKMO:	CAMN 4,(5)
	JRST EQU
ADIN:	ADDI 5,2
	CAIGE 5,(TS)
	JRST LKMO
	ADDI MA,2
BGIN:	CAIGE MA,-MEM(N)
	JRST FDEQ
	HRRZI MA,-MEM(CX)
	ADDI N,2
	CAIGE N,(TS)
	JRST FDEQ
	JRST BACK
EQU:	HRRZI OU,(MA)
	CAILE TS,2(5)
	CAIG N,MEM+2(MA)
	JRST CKLA
	MOVE 6,MEM+2(MA)
	CAMN 6,2(5)
	HRRI OU,2(MA)
CKLA:	CAIL 5,2(N)
	SKIPL 6,-2(5)
	JRST .+3
	CAIN MA,2(6)
	JRST LAEQ
	CAIE OU,(MA)
	JRST MVM
	SKIPL 1(5)
	SKIPN 6,MEM+1(OU)
	JRST ADIN
	TLNN 6,777777
	XCT TABL(6)
DOUT:	HRLI OU,400001(OU)
	AOJ OU,
	MOVEM OU,1(5)
	CAIGE CX,-2(TS)
	JRST ADIN
BACK:	HRRZI 6,-2(CX)
	ADDI 6,2
	SKIPGE 1(6)
	JRST NEGA+1
	SKIPGE OU,(6)
	AOBJN OU,NEGA
	HRRZI OU,-MEM(6)
	HRLI OU,400000(OU)
NEGA:	MOVEM OU,1(6)
	CAIGE 6,-2(TS)
	JRST BACK+1
	CAIE TS,2(CX)
	JRST NOT1
	SUBI TS,2
	MOVE EN,(TS)
	SUB OU,ONEB
	CAME OU,EN
	CAIN CX,MEM(OU)
	AOBJN OU,NEW1
	SKIPL FL,SAVFLG
	AOBJN OU,FIXIT
	HRRZI EN,MEM+1(OU)
	ADD OU,ONEB
	POPJ P,
NEW1:	SKIPGE FL,SAVFLG
	POPJ P,   
	HRRZI OU,-MEM+1(CX)
	HRLI OU,400000(OU)
	JRST ADTS
NOT1:	HRRZI EN,-MEM-2(TS)
	HRLI EN,400000-MEM(CX)
	MOVE OU,EN
	ADD OU,ONEB
	SKIPGE FL,SAVFLG
	POPJ P,
	MOVEM EN,(TS)
	MOVEM OU,1(TS)
	HRRZI OU,-MEM+1(TS)
	HRLI OU,400000(OU)
ADTS:	ADDI TS,2
FIXIT:	SKIPL EN,TMP
	JRST CKFLS
	MOVEM EN,(TS)
	HRRZI EN,1(TS)
	ADDI TS,2
CKFLS:	PUSHJ P,(FL)
	SETOM SAVFLG
	POPJ P,
GETO:	HRRZI MA,(TS)
	HRLI MA,700
	SKIPE PTOFL
	HRLI MA,1100
	ADDI TS,200
	TLZN OU,400000
	TRNN OU,400000
	JRST GOUT
	MOVE EN,OU
	HRRZI 4,777775
	JRST MKOUT
PUDO:	HRLI OU,(4)
	PUSH TS,OU
	MOVE OU,EN
GOUT:	HLRZ 4,OU
MOR:	MOVE EN,MEM(4)
	TLZE EN,400000
	JRST PUDO
	TRNN EN,400000
	JRST DPCH
MKOUT:	HLRZ 6,EN
	HRLI EN,(EN)
	TRZ EN,400000
	MOVEM EN,MEM(6)
	CAIA
DPCH:	IDPB EN,MA
ADO:	ADDI 4,2
	CAIG 4,(OU)
	JRST MOR
	TLNN TS,777777
	JRST TYOUT
	POP TS,OU
	HLRZ 4,OU
	JRST ADO
TYOUT:	HRRZI EN,15
	IDPB EN,MA
	HRRZI EN,12
	IDPB EN,MA
	SETZ EN,
	IDPB EN,MA
	SUBI TS,177
	SKIPE PTOFL
	JRST PTOUT
	OUTSTR SPACE
	OUTSTR (TS)
	POPJ P,
SAVIT:	HRRZM 6,SAVFLG
	OUTSTR CRLF
	MOVE OU,-1(5)
FIXTS:	SUBI TS,2
	SUB P,ONEB
	JRST BGIN-1

CRFIX:	CAIGE 5,-2(TS)
	POPJ P,
	JRST FIXTS
INDER:	HRRZI 6,.+2
	JRST SAVIT
	MOVEM OU,(EN)
	POPJ P,
LITA:	HRRZI 6,.+2
	JRST SAVIT
	SUB OU,ONEB
	MOVEM OU,(EN)
	POPJ P,
RPLACE:	HRRZI 6,.+2
	JRST SAVIT
	HRR OU,MEM(OU)
	TLZ OU,400000
	TRO OU,400000
	MOVEM OU,(EN)
	POPJ P,
ADER:	HRRZI 6,.+2
	JRST SAVIT
	MOVE 4,MEM-1(OU)
	MOVEM 4,2(TS)
	CAIE TS,1(OU)
	JRST OLD1
	SUBI TS,2
	MOVE OU,(OU)
OLD1:	MOVEM OU,3(TS)
	MOVE 5,(EN)
	MOVE 4,MEM-1(5)
	MOVEM 4,(TS)
	MOVEM 5,1(TS)
	HRRZI OU,-MEM+2(TS)
	HRLI OU,400000-MEM(TS)
	MOVEM OU,4(TS)
	AOBJP OU,
	MOVEM OU,5(TS)
	HRRZI OU,-MEM+5(TS)
	HRLI OU,400000(OU)
	MOVEM OU,(EN)
	ADDI TS,6
	POPJ P,
PTBEG:	SKIPN PTNUM
	PTYGET PTNUM
	POPJ P,
	HRRZI 6,5
	HRRZM 6,PTNUM+1
	PTJOBX PTNUM
	POPJ P,
	SETOM PTOFL
	JRST FIXTS
PTEND:	SKIPN PTNUM
	POPJ P,
	PTYREL PTNUM
	SETZM PTNUM
	SETZM PTOFL
	POPJ P,
PTON:	SKIPE PTNUM
	SETOM PTOFL
	POPJ P,
PTOFF:	SETZM PTOFL
	POPJ P,
PTCALL:	SKIPN PTNUM
	POPJ P,
	MOVE 6,CALLC
	MOVEM 6,(TS)
PTOUT:	MOVE EN,PTNUM
	PTWRS9 EN
	POPJ P,

INTRU:	MOVE EN,JOBCNI
	TLNE EN,20000
	DISMIS
	IMSKCL 1,EN
	MOVE OU,JOBTPC
	TRNE EN,20000
	JRST CORUP
	CAIE OU,.+7
	MOVEM OU,IPC+1
	UWAIT
	DEBREAK
	HRRZ 1,PTNUM
POLO:	PTOCNT 1
	SKIPG 2
	INTJEN IPC
	HRRZI 2,PTNUM+2
	PTRDS 1
	OUTSTR (2)
	JRST POLO
CORUP:	SOJ OU,
	MOVEM OU,IPC+1
	UWAIT
	DEBREAK
	HRRZ 1,JOBREL
	AOJ 1,
	CORE 1,
	JRST TABL+77
	INTJEN IPC
TABL:	REPEAT 15,{JFCL↔}
	PUSHJ P,CRFIX
	REPEAT 24,{JFCL↔}
	PUSHJ P,STLIT
	REPEAT 11,{JFCL↔}
	PUSHJ P,PTON
	JFCL
	PUSHJ P,PTOFF
	REPEAT 13,{JFCL↔}
	PUSHJ P,INDER
	REPEAT 4,{JFCL↔}
	JSR $I
	JFCL
	PUSHJ P,ADER
	JFCL
	PUSHJ P,PTCALL
	REPEAT 2,{JFCL↔}
	PUSHJ P,FILIN
	REPEAT 4,{JFCL↔}
	PUSHJ P,PTEND
	PUSHJ P,LITA
	REPEAT 2,{JFCL↔}
	PUSHJ P,FILO
	PUSHJ P,PTBEG
	JFCL
	PUSHJ P,RPLACE
	REPEAT 54,{JFCL↔}
PDPO:	IOWD 100,PDL
PDL:	BLOCK 100    ↔	PTOFL:	0
IPC:	21000,,20000 ↔	0  
DEVN:	17	     ↔	SIXBIT/DSK/ ↔	0
IFNAM:	SIXBIT/ALY/  ↔	SIXBIT/OOP/ ↔	BLOCK 2
OFNAM:	SIXBIT/LAST/  ↔	SIXBIT/OOP/ ↔	BLOCK 2
INPO:	IOWD 200,MEM ↔	QMARK:	45767706424
CRLF:	64240,,0     ↔	ASTR:	ASCIZ/*/
SPACE:	ASCIZ/ /     ↔	CALLC:	600600,,0
TMP:	0    ↔	SAVFLG:	-1
LITFL: -1    ↔	LITCHR:	LITCK
ONEB:	1,,1 ↔	TWOB:	2,,2
RETRN:	LOOP+2 ↔ PATCH:	BLOCK 100
PTNUM:	0    ↔	BLOCK 400
	END INT